package com.cskaoyan._03advantages;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/9 9:58
 **/
/*
练习：

在一款游戏中，我们设计了三种类型的鸭子，这些鸭子有一些共同的属性，也有共同的行为，
比如都可以叫，都会游泳等。

编写程序，描述这些鸭子。

后来，需求更改了，这些鸭子不能游泳了，但是都会飞，怎么改呢？

再后来，需求又改了，新增了一种鸭子，但这个鸭子不会飞，又怎么办呢？


继承中的优点:
1.代码可以复用,减少了代码的冗余
2.方便扩展

缺点:
父类的修改能够体现到所有的子类中,子类无条件接收父类中的成员
 */
public class Demo {
    public static void main(String[] args) {
        FirstDuck firstDuck = new FirstDuck();
        firstDuck.call();
        firstDuck.fly();
        SecondDuck secondDuck = new SecondDuck();
        secondDuck.call();
        secondDuck.fly();
        ThirdDuck thirdDuckDuck = new ThirdDuck();
        thirdDuckDuck.call();
        thirdDuckDuck.fly();
        System.out.println("---------");
        FourthDuck fourthDuck = new FourthDuck();
        fourthDuck.fly();
    }
}

// 定义父类Duck
class Duck{
    String name;
    // 成员方法
    public void call() {
        System.out.println("嘎嘎嘎嘎");
    }

    //public void swim() {
    //    System.out.println("游泳");
    //}

    public void fly() {
        System.out.println("飞的更高");
    }
}

class FirstDuck extends Duck{

}

class SecondDuck extends Duck{

}

class ThirdDuck extends Duck{

}
class FourthDuck extends Duck{
    // @Override注解: 标记该方法是否是重写(覆盖)父类的方法
    @Override
    public void fly() {
        System.out.println("不会飞");
    }
    // 对于fly方法还是继承了,进行覆盖, 修改了具体的实现
}